/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.prod.mbean;

import com.brain.conf.dto.CentroCostosDto;
import com.brain.conf.dto.UnidadMedidaDto;
import com.brain.conf.manager.CentroCostosManager;
import com.brain.conf.manager.UnidadMedidaManager;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.ParametroManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.ArchivoMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.prod.dto.CostoIndirectoDto;
import com.brain.prod.dto.IncidenciaTrabajoDto;
import com.brain.prod.dto.MaquinaDto;
import com.brain.prod.dto.OrdenFabOperacionDto;
import com.brain.prod.dto.ParteTrabajoCategoriaDto;
import com.brain.prod.dto.ParteTrabajoDto;
import com.brain.prod.dto.ParteTrabajoIncidenciaDto;
import com.brain.prod.dto.ParteTrabajoIndirectoDto;
import com.brain.prod.dto.ParteTrabajoMaquinaDto;
import com.brain.prod.dto.ParteTrabajoOperacionDto;
import com.brain.prod.dto.ParteTrabajoProductoDto;
import com.brain.prod.dto.ParteTrabajoUtillajeDto;
import com.brain.prod.dto.UtillajeDto;
import com.brain.prod.manager.CostoIndirectoManager;
import com.brain.prod.manager.IncidenciaTrabajoManager;
import com.brain.prod.manager.MaquinaManager;
import com.brain.prod.manager.OrdenFabOperacionManager;
import com.brain.prod.manager.ParteTrabajoCategoriaManager;
import com.brain.prod.manager.ParteTrabajoIncidenciaManager;
import com.brain.prod.manager.ParteTrabajoIndirectoManager;
import com.brain.prod.manager.ParteTrabajoManager;
import com.brain.prod.manager.ParteTrabajoMaquinaManager;
import com.brain.prod.manager.ParteTrabajoOperacionManager;
import com.brain.prod.manager.ParteTrabajoProductoManager;
import com.brain.prod.manager.ParteTrabajoUtillajeManager;
import com.brain.prod.manager.UtillajeManager;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 * @author Greip Company
 * @since 09/01/2014
 * @version 1.0
 */
@Controller("parteTrabajoMBean")
@Scope("session")
public class ParteTrabajoMBean extends GenericMBean implements Serializable {

    /**
     * Logger permite registrar los errores que ocurren
     * @since 09/01/2014
     */
    private static Logger logger = Logger.getLogger(ParteTrabajoMBean.class);
    
    /**
     * manager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoManager manager;
    
    /**
     * applicationMBean permite obtener diferentes valores de la aplicación, como acciones y estilos
     * @since 09/01/2014
     */
    @Autowired
    private ApplicationMBean applicationMBean;
    
    /**
     * sessionMBean: contiene información del usuario, asi como las acciones que se realizan sobre la entidad
     * @since 10/01/2014
     */
    @Autowired
    private SessionMBean sessionMBean;
    
    /**
     * recursosManager permite mostrar mensajes en las vistas
     * @since 09/01/2014
     */
    @Resource
    private RecursosManager recursosManager;
    
    /**
     * bitacoraManager: permite desplegar un popup con las acciones que se realizaron sobre la entidad
     * @since 10/01/2014
     */
    @Resource
    private BitacoraManager bitacoraManager;
    
    /**
     * incidenciaManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoIncidenciaDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoIncidenciaManager incidenciaManager;
    
    /**
     * operacionManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoOperacionManager operacionManager;
    
    /**
     * maqManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoMaquinaDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoMaquinaManager maqManager;
    
    /**
     * utiManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoUtillajeDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoUtillajeManager utiManager;
    
    /**
     * categoriaManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoCategoriaDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoCategoriaManager categoriaManager;
    
    /**
     * productManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoProductoDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoProductoManager productManager;
    
    /**
     * indirectoManager: comunica a la vista con la capa de negocio de la entidad ParteTrabajoIndirectoDto
     * @since 10/01/2014
     */
    @Resource
    private ParteTrabajoIndirectoManager indirectoManager;
    @Resource
    private ArchivoMBean archivoMBean;
    
    /**
     * lista: almacena el listado de registros de la entidad MaquinaDto. Usada en la vista listaParteTrabajo.xhtml
     * @since 10/01/2014
     */
    private List<ParteTrabajoDto> lista;
    
    /**
     * dto: almacena los datos provenientes de la vista parteTrabajo.xhtml
     * @since 10/01/2014
     */
    private ParteTrabajoDto dto;
    
    /**
     * dtoFiltro: almacena los datos provenientes de la vista listaParteTrabajo.xhtml
     * @since 10/01/2014
     */
    private ParteTrabajoDto dtoFiltro;
    
    /**
     * detaIncidenciaDto: almacena los datos de la entidad ParteTrabajoIncidenciaDto
     * @since 10/01/2014
     */
    private ParteTrabajoIncidenciaDto detaIncidenciaDto;
    
    /**
     * detaOperacionDto: almacena los datos de la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    private ParteTrabajoOperacionDto detaOperacionDto;
    
    /**
     * detaMaquinaDto: almacena los datos de la entidad ParteTrabajoMaquinaDto
     * @since 10/01/2014
     */
    private ParteTrabajoMaquinaDto detaMaquinaDto;
    
    /**
     * detaUtillajeDto: almacena los datos de la entidad ParteTrabajoUtillajeDto
     * @since 10/01/2014
     */
    private ParteTrabajoUtillajeDto detaUtillajeDto;
    
    /**
     * detaCategoriaDto: almacena los datos de la entidad ParteTrabajoCategoriaDto
     * @since 10/01/2014
     */
    private ParteTrabajoCategoriaDto detaCategoriaDto;
    
    /**
     * detaProductoDto: almacena los datos de la entidad ParteTrabajoProductoDto
     * @since 10/01/2014
     */
    private ParteTrabajoProductoDto detaProductoDto;
    
    /**
     * detaIndirectoDto: almacena los datos de la entidad ParteTrabajoIndirectoDto
     * @since 10/01/2014
     */
    private ParteTrabajoIndirectoDto detaIndirectoDto;
    
    /**
     * keyTitulo: variable que almacena el titulo de los paneles de la entidad
     * @since 10/01/2014
     */
    private String keyTitulo = "form.parte.trabajo.panel";
    
    /**
     * listaIncidenciaTrabajo: variable utilizada para construir el combo de la entidad IncidenciaTrabajoDto
     * @since 10/01/2014
     */
    private List<IncidenciaTrabajoDto> listaIncidenciaTrabajo;
    
    /**
     * listaOperacion: variable utilizada para construir el combo de la entidad OrdenFabOperacionDto
     * @since 10/01/2014
     */
    private List<OrdenFabOperacionDto> listaOperacion;
    
    /**
     * listaCentroCosto: variable utilizada para construir el combo de la entidad CentroCostosDto
     * @since 10/01/2014
     */
    private List<CentroCostosDto> listaCentroCosto;
    
    /**
     * listaMaquina: variable utilizada para construir el combo de la entidad MaquinaDto
     * @since 10/01/2014
     */
    private List<MaquinaDto> listaMaquina;
    
    /**
     * listaIndirecto: variable utilizada para construir el combo de la entidad CostoIndirectoDto
     * @since 10/01/2014
     */
    private List<CostoIndirectoDto> listaIndirecto;
    
    /**
     * listaTipoProducto: variable utilizada para construir el combo de los tipos de producto
     * @since 10/01/2014
     */
    private List<ParametroDto> listaTipoProducto;
    
    /**
     * listaUnidadMedida: variable utilizada para construir el combo de la entidad UnidadMedidaDto
     * @since 10/01/2014
     */
    private List<UnidadMedidaDto> listaUnidadMedida;
    
    /**
     * listaUtillaje: variable utilizada para construir el combo de la entidad UtillajeDto
     * @since 10/01/2014
     */
    private List<UtillajeDto> listaUtillaje;

    /**
     * iniciar(): inicializa las variable dtoFiltro y lista
     * @return retorna la dirección de la vista listaParteTrabajo.xhtml
     */
    public String iniciar() {
        this.dtoFiltro = new ParteTrabajoDto();
        this.lista = null;
        return this.manager.getUrlLista();
    }

    /**
     * buscar(ae): realiza la búsqueda de registros de la entidad ParteTrabajoDto y lo asigna a la variable lista
     * @since: 10/01/2014
     * @param ae por defecto null
     */
    public void buscar(ActionEvent ae) {
        try {
            this.lista = this.manager.obtenerParteTrabajo(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
        }
    }
    
    /**
     * nuevaIncidencia(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevaIncidencia() {
        sessionMBean.setAccionDetalle(applicationMBean.getNuevo());
        this.detaIncidenciaDto = this.incidenciaManager.inicializar();
        this.detaIncidenciaDto.setParteTrabajoDto(this.dto);
    }
    
    /**
     * nuevaOperacion(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevaOperacion() {
        sessionMBean.setAccionDetalle(applicationMBean.getNuevo());
        this.detaOperacionDto = this.operacionManager.inicializar();
        this.detaOperacionDto.setParteTrabajoDto(this.dto);
    }
    
    /**
     * nuevaMaquina(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevaMaquina() {
        this.detaMaquinaDto = this.maqManager.inicializar();
        this.detaMaquinaDto.setAccionNvl3(applicationMBean.getNuevo());
        this.detaMaquinaDto.setParteTrabajoOperacionDto(this.detaOperacionDto);
    }
    
    /**
     * nuevoUtillaje(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevoUtillaje() {
        this.detaUtillajeDto = this.utiManager.inicializar();
        this.detaUtillajeDto.setAccionNvl3(applicationMBean.getNuevo());
        this.detaUtillajeDto.setParteTrabajoOperacionDto(this.detaOperacionDto);
    }
    
    /**
     * nuevaCategoria(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevaCategoria() {
        this.detaCategoriaDto = this.categoriaManager.inicializar();
        this.detaCategoriaDto.setAccionNvl3(applicationMBean.getNuevo());
        this.detaCategoriaDto.setParteTrabajoOperacionDto(this.detaOperacionDto);
    }
    
    /**
     * nuevoProducto(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevoProducto() {
        this.detaProductoDto = this.productManager.inicializar();
        this.detaProductoDto.setAccionNvl3(applicationMBean.getNuevo());
        this.detaProductoDto.setParteTrabajoOperacionDto(this.detaOperacionDto);
    }
    
    /**
     * nuevoIndirecto(): setea la accionDetalle a nuevo, crea el titulo del panel entidadDetalle e inicializa la entidad detalle.
     * Asigna a la entidad detalle la referencia de la entidad padre
     * @since 10/01/2014
     */
    public void nuevoIndirecto() {
        this.detaIndirectoDto = this.indirectoManager.inicializar();
        this.detaIndirectoDto.setAccionNvl3(applicationMBean.getNuevo());
        this.detaCategoriaDto.setParteTrabajoOperacionDto(this.detaOperacionDto);
    }

    /**
     * editar(): setea la accion a editar, crea el titulo del panel de la entidad
     * @since 10/01/2014
     * @return retorna la direccion de la vista ParteTrabajo.xhtml
     */
    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return this.manager.getUrl();
    }
    
    /**
     * editarIncidencia(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarIncidencia() {
        sessionMBean.setAccionDetalle(applicationMBean.getEditar());
        if (this.detaIncidenciaDto.getId() != null) {
            try {
                this.detaIncidenciaDto = this.incidenciaManager.obtenerPorId(this.detaIncidenciaDto.getId());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * editarOperacion(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarOperacion() {
        sessionMBean.setAccionDetalle(applicationMBean.getEditar());
        if (this.detaOperacionDto.getId() != null) {
            try {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * editarMaquina(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarMaquina() {        
        if (this.detaMaquinaDto.getId() != null) {
            try {
                this.detaMaquinaDto = this.maqManager.obtenerPorId(this.detaMaquinaDto.getId());
                this.detaMaquinaDto.setAccionNvl3(applicationMBean.getEditar());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * editarUtillaje(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarUtillaje() {        
        if (this.detaUtillajeDto.getId() != null) {
            try {
                this.detaUtillajeDto = this.utiManager.obtenerPorId(this.detaUtillajeDto.getId());
                this.detaUtillajeDto.setAccionNvl3(applicationMBean.getEditar());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * editarCategoria(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarCategoria() {        
        if (this.detaCategoriaDto.getId() != null) {
            try {
                this.detaCategoriaDto = this.categoriaManager.obtenerPorId(this.detaCategoriaDto.getId());
                this.detaCategoriaDto.setAccionNvl3(applicationMBean.getEditar());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * editarProducto(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarProducto() {        
        if (this.detaProductoDto.getId() != null) {
            try {
                this.detaProductoDto = this.productManager.obtenerPorId(this.detaProductoDto.getId());
                this.detaProductoDto.setAccionNvl3(applicationMBean.getEditar());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * editarIndirecto(): setea la accionDetalle a editar, crea el titulo del panel de la entidad detalle y obtiene la entidadDetalle
     * @since 10/01/2014
     */
    public void editarIndirecto() {        
        if (this.detaIndirectoDto.getId() != null) {
            try {
                this.detaIndirectoDto = this.indirectoManager.obtenerPorId(this.detaIndirectoDto.getId());
                this.detaIndirectoDto.setAccionNvl3(applicationMBean.getEditar());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }

    /**
     * ver(): setea la accion a ver, crea el titulo del panel de la entidad
     * @since 10/01/2014
     * @return retorna la dirección de la vista maquina.xhtml
     */
    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return this.manager.getUrl();
    }
    
    /**
     * verIncidencia(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verIncidencia() {
        sessionMBean.setAccionDetalle(applicationMBean.getVer());
        if (this.detaIncidenciaDto.getId() != null) {
            try {
                this.detaIncidenciaDto = this.incidenciaManager.obtenerPorId(this.detaIncidenciaDto.getId());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * verOperacion(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verOperacion() {
        sessionMBean.setAccionDetalle(applicationMBean.getVer());
        if (this.detaOperacionDto.getId() != null) {
            try {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * verMaquina(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verMaquina() {
        if (this.detaMaquinaDto.getId() != null) {
            try {
                this.detaMaquinaDto = this.maqManager.obtenerPorId(this.detaMaquinaDto.getId());
                this.detaMaquinaDto.setAccionNvl3(applicationMBean.getVer());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * verUtillaje(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verUtillaje() {
        if (this.detaUtillajeDto.getId() != null) {
            try {
                this.detaUtillajeDto = this.utiManager.obtenerPorId(this.detaUtillajeDto.getId());
                this.detaUtillajeDto.setAccionNvl3(applicationMBean.getVer());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * verCategoria(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verCategoria() {
        if (this.detaCategoriaDto.getId() != null) {
            try {
                this.detaCategoriaDto = this.categoriaManager.obtenerPorId(this.detaCategoriaDto.getId());
                this.detaCategoriaDto.setAccionNvl3(applicationMBean.getVer());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * verProducto(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verProducto() {
        if (this.detaProductoDto.getId() != null) {
            try {
                this.detaProductoDto = this.productManager.obtenerPorId(this.detaProductoDto.getId());
                this.detaProductoDto.setAccionNvl3(applicationMBean.getVer());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }
    
    /**
     * verIndirecto(): setea la accionDetalle a ver, crea el titulo del panel de la entidad detalle y obtiene la entidad detalle
     * @since 10/01/2014
     */
    public void verIndirecto() {
        if (this.detaIndirectoDto.getId() != null) {
            try {
                this.detaIndirectoDto = this.indirectoManager.obtenerPorId(this.detaIndirectoDto.getId());
                this.detaIndirectoDto.setAccionNvl3(applicationMBean.getVer());
            } catch (DAOException e) {
                showError(e.getMessage());
                logger.error(e);
            }
        }
    }

    /**
     * Metodo guardar() se encarga de guardar la entidad ParteTrabajoDto y devuelve null como valor de cadena
     * @since 10/01/2014
     * @return retorna null como valor de cadena
     */
    public String guardar() {
        if (this.manager.guardar(this.dto) != null) {
            this.editar();
        }
        return null;
    }
    
    /**
     * guardarIncidencia(): permite guardar la entidad ParteTrabajoIncidenciaDto; a la vez, obtiene la entidad ParteTrabajoDto
     * @since 10/01/2014
     */
    public void guardarIncidencia() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.incidenciaManager.guardar(this.detaIncidenciaDto) != null) {
                this.dto = this.manager.obtenerPorId(this.dto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * guardarOperacion(): permite guardar la entidad ParteTrabajoOperacionDto; a la vez, obtiene la entidad ParteTrabajoDto
     * @since 10/01/2014
     */
    public void guardarOperacion() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.operacionManager.guardar(this.detaOperacionDto) != null) {
                this.dto = this.manager.obtenerPorId(this.dto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * guardarMaquina(): permite guardar la entidad ParteTrabajoMaquinaDto; a la vez, obtiene la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    public void guardarMaquina() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.maqManager.guardar(this.detaMaquinaDto) != null) {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * guardarUtillaje(): permite guardar la entidad ParteTrabajoUtillajeDto; a la vez, obtiene la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    public void guardarUtillaje() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.utiManager.guardar(this.detaUtillajeDto) != null) {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * guardarCategoria(): permite guardar la entidad ParteTrabajoCategoriaDto; a la vez, obtiene la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    public void guardarCategoria() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.categoriaManager.guardar(this.detaCategoriaDto) != null) {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * guardarProducto(): permite guardar la entidad ParteTrabajoProductoDto; a la vez, obtiene la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    public void guardarProducto() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.productManager.guardar(this.detaProductoDto) != null) {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * guardarIndirecto(): permite guardar la entidad ParteTrabajoIndirectoDto; a la vez, obtiene la entidad ParteTrabajoOperacionDto
     * @since 10/01/2014
     */
    public void guardarIndirecto() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.indirectoManager.guardar(this.detaIndirectoDto) != null) {
                this.detaOperacionDto = this.operacionManager.obtenerPorId(this.detaOperacionDto.getId());
            } else {
                resultado = false;
            }
        } catch (DAOException e) {
            showError("ERROR_SISTEMA", e.getMessage());
            logger.error(e);
        }
        context.addCallbackParam("CallbackParam", resultado);
    }
    
    /**
     * procesar(): permite procesar el parte de trabajo
     * @since 10/01/2014
     */
    public void procesar() {
        this.manager.procesar(this.dto);
    }

    /**
     * verBitacora(): método encargado de mostrar un popup con las acciones realizadas sobre la entidad
     * @since 10/01/2014
     * @return retorna null
     */
    public String verBitacora() {
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    /**
     * retroceder(): retorna a la pagina listaParteTrabajo.xhtml mostrando el listado de todos los registros
     * @since 10/01/2014
     * @return retorna la dirección de la vista listaParteTrabajo.xhtml
     */
    public String retroceder() {
        buscar(null);
        return this.manager.getUrlLista();
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public ParteTrabajoDto getDto() {
        return dto;
    }

    public void setDto(ParteTrabajoDto dto) {
        this.dto = dto;
    }

    public ParteTrabajoDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(ParteTrabajoDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<ParteTrabajoDto> getLista() {
        return lista;
    }

    public void setLista(List<ParteTrabajoDto> lista) {
        this.lista = lista;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        ParteTrabajoMBean.logger = logger;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public ArchivoMBean getArchivoMBean() {
        return archivoMBean;
    }

    public void setArchivoMBean(ArchivoMBean archivoMBean) {
        this.archivoMBean = archivoMBean;
    }

    public ParteTrabajoManager getManager() {
        return manager;
    }

    public void setManager(ParteTrabajoManager manager) {
        this.manager = manager;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public ParteTrabajoIncidenciaDto getDetaIncidenciaDto() {
        return detaIncidenciaDto;
    }

    public void setDetaIncidenciaDto(ParteTrabajoIncidenciaDto detaIncidenciaDto) {
        this.detaIncidenciaDto = detaIncidenciaDto;
    }

    public List<IncidenciaTrabajoDto> getListaIncidenciaTrabajo() throws DAOException{
        IncidenciaTrabajoManager incidenciaTrabajoManager = (IncidenciaTrabajoManager) WebServletContextListener.getApplicationContext().getBean("incidenciaTrabajoManager");
        this.listaIncidenciaTrabajo = incidenciaTrabajoManager.obtenerTodos();
        return this.listaIncidenciaTrabajo;
    }

    public void setListaIncidenciaTrabajo(List<IncidenciaTrabajoDto> listaIncidenciaTrabajo) {
        this.listaIncidenciaTrabajo = listaIncidenciaTrabajo;
    }

    public ParteTrabajoOperacionDto getDetaOperacionDto() {
        return detaOperacionDto;
    }

    public void setDetaOperacionDto(ParteTrabajoOperacionDto detaOperacionDto) {
        this.detaOperacionDto = detaOperacionDto;
    }

    public List<OrdenFabOperacionDto> getListaOperacion() throws DAOException{
        OrdenFabOperacionManager ordenFabOperacionManager = (OrdenFabOperacionManager) WebServletContextListener.getApplicationContext().getBean("ordenFabOperacionManager");
        this.listaOperacion = ordenFabOperacionManager.obtenerTodos();
        return this.listaOperacion;
    }

    public void setListaOperacion(List<OrdenFabOperacionDto> listaOperacion) {
        this.listaOperacion = listaOperacion;
    }

    public List<CentroCostosDto> getListaCentroCosto() throws DAOException{
        CentroCostosManager centroCostoManager = (CentroCostosManager) WebServletContextListener.getApplicationContext().getBean("centroCostosManager");
        this.listaCentroCosto = centroCostoManager.obtenerActivos();
        return this.listaCentroCosto;
    }

    public void setListaCentroCosto(List<CentroCostosDto> listaCentroCosto) {
        this.listaCentroCosto = listaCentroCosto;
    }

    public ParteTrabajoMaquinaDto getDetaMaquinaDto() {
        return detaMaquinaDto;
    }

    public void setDetaMaquinaDto(ParteTrabajoMaquinaDto detaMaquinaDto) {
        this.detaMaquinaDto = detaMaquinaDto;
    }

    public ParteTrabajoUtillajeDto getDetaUtillajeDto() {
        return detaUtillajeDto;
    }

    public void setDetaUtillajeDto(ParteTrabajoUtillajeDto detaUtillajeDto) {
        this.detaUtillajeDto = detaUtillajeDto;
    }

    public ParteTrabajoCategoriaDto getDetaCategoriaDto() {
        return detaCategoriaDto;
    }

    public void setDetaCategoriaDto(ParteTrabajoCategoriaDto detaCategoriaDto) {
        this.detaCategoriaDto = detaCategoriaDto;
    }

    public ParteTrabajoProductoDto getDetaProductoDto() {
        return detaProductoDto;
    }

    public void setDetaProductoDto(ParteTrabajoProductoDto detaProductoDto) {
        this.detaProductoDto = detaProductoDto;
    }

    public ParteTrabajoIndirectoDto getDetaIndirectoDto() {
        return detaIndirectoDto;
    }

    public void setDetaIndirectoDto(ParteTrabajoIndirectoDto detaIndirectoDto) {
        this.detaIndirectoDto = detaIndirectoDto;
    }

    public List<MaquinaDto> getListaMaquina() throws DAOException{
        MaquinaManager mManager = (MaquinaManager) WebServletContextListener.getApplicationContext().getBean("maquinaManager");
        this.listaMaquina = mManager.obtenerActivos();
        return this.listaMaquina;
    }

    public void setListaMaquina(List<MaquinaDto> listaMaquina) {
        this.listaMaquina = listaMaquina;
    }

    public List<CostoIndirectoDto> getListaIndirecto() throws DAOException{
        CostoIndirectoManager costoIndirectoManager = (CostoIndirectoManager) WebServletContextListener.getApplicationContext().getBean("costoIndirectoManager");
        this.listaIndirecto = costoIndirectoManager.obtenerActivos();
        return this.listaIndirecto;
    }

    public void setListaIndirecto(List<CostoIndirectoDto> listaIndirecto) {
        this.listaIndirecto = listaIndirecto;
    }

    public List<ParametroDto> getListaTipoProducto() throws DAOException{
        ParametroManager paramManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        this.listaTipoProducto = paramManager.obtenerParametrosActivosPorCatalogoSistema(427L);
        return this.listaTipoProducto;
    }

    public void setListaTipoProducto(List<ParametroDto> listaTipoProducto) {
        this.listaTipoProducto = listaTipoProducto;
    }

    public List<UnidadMedidaDto> getListaUnidadMedida() throws DAOException{
        UnidadMedidaManager umManager = (UnidadMedidaManager) WebServletContextListener.getApplicationContext().getBean("unidadMedidaManager");
        this.listaUnidadMedida = umManager.obtenerTodosActivos();
        return this.listaUnidadMedida;
    }

    public void setListaUnidadMedida(List<UnidadMedidaDto> listaUnidadMedida) {
        this.listaUnidadMedida = listaUnidadMedida;
    }

    public List<UtillajeDto> getListaUtillaje() throws DAOException{
        UtillajeManager utManager = (UtillajeManager) WebServletContextListener.getApplicationContext().getBean("utillajeManager");
        this.listaUtillaje = utManager.obtenerActivos();
        return this.listaUtillaje;
    }

    public void setListaUtillaje(List<UtillajeDto> listaUtillaje) {
        this.listaUtillaje = listaUtillaje;
    }
}
